﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Joel.Vishnu.Modelo.Entidades;
using Joel.Vishnu.Modelo.Enumeradores;
using Joel.Vishnu.Presentacion.Vistas;
using Joel.Vishnu.Presentacion;

namespace Joel.Vishnu.Formularios
{
    public partial class Facturas : Form, IFacturas
    {
        #region Constructores

        public Facturas()
        {
            InitializeComponent();
            presentador = new FacturasPresentador(this);
            grdFacturas.AutoGenerateColumns = false;
            grdFacturas.DataSource = bsFacturas;
        }

        #endregion

        #region Atributos

        private EnumEstado estado;
        private FacturasPresentador presentador;

        #endregion

        #region Propiedades

        public Int32 FacturaId
        {
            get { return Convert.ToInt32(txtId.Text); }
        }

        public Int32 ClienteId
        {
            get { return Convert.ToInt32(cboCliente.SelectedValue); }
        }

        public Int32 EmpleadoId
        {
            get { return Convert.ToInt32(cboEmpleado.SelectedValue); }
        }

        public Empleado Empleado
        {
            set { throw new NotImplementedException(); }
        }
    
        public List<Empleado> ListaEmpleados
        {
            set
            {
                cboEmpleado.ValueMember = "Id";
                cboEmpleado.DisplayMember = "ApellidoNombre";
                cboEmpleado.DataSource = value;
            }
        }

        public Cliente Cliente
        {
            set { throw new NotImplementedException(); }
        }

        public List<Cliente> ListaClientes
        {
            set
            {
                cboCliente.ValueMember = "Id";
                cboCliente.DisplayMember = "ApellidoNombre";
                cboCliente.DataSource = value;
            }
        }

        public DateTime FechaHora
        {
            get { throw new NotImplementedException(); }
        }
        
        public Decimal Iva
        {
            get { throw new NotImplementedException(); }
        }

        public EnumEstado Estado
        {
            get { return estado; }
        }

        public List<Factura> ListaFacturas
        {
            set { bsFacturas.DataSource = value; }
        }

        #endregion

        #region Metodos

        public void HabilitarControles()
        {
            lblId.Enabled = !lblId.Enabled;
            lblCliente.Enabled = !lblCliente.Enabled;
            lblEmpleado.Enabled = !lblEmpleado.Enabled;
            lblFecha.Enabled = !lblFecha.Enabled;
            lblHora.Enabled = !lblHora.Enabled;
            lblSubTotal.Enabled = !lblSubTotal.Enabled;
            lblIva.Enabled = !lblIva.Enabled;
            lblTotal.Enabled = !lblTotal.Enabled;

            txtId.Enabled = !txtId.Enabled;
            cboCliente.Enabled = !cboCliente.Enabled;
            cboEmpleado.Enabled = !cboEmpleado.Enabled;
            dtpFecha.Enabled = !dtpFecha.Enabled;
            dtpHora.Enabled = !dtpHora.Enabled;
            //numSubTotal.Enabled = !numSubTotal.Enabled;
            numIva.Enabled = !numIva.Enabled;
            //numTotal.Enabled = !numTotal.Enabled;

            btnInsertar.Enabled = !btnInsertar.Enabled;
            btnVerDetalles.Enabled = !btnVerDetalles.Enabled;
            btnAceptar.Enabled = !btnAceptar.Enabled;
            btnCancelar.Enabled = !btnCancelar.Enabled;

            grdFacturas.Enabled = !grdFacturas.Enabled;
        }

        public void LimpiarCampos()
        {
            txtId.Text = "0";
            cboCliente.SelectedValue = String.Empty;
            cboEmpleado.SelectedValue = String.Empty;
            dtpFecha.Value = DateTime.Now;
            dtpHora.Value = DateTime.Now;
            numSubTotal.Value = 0;
            numIva.Value = 0;
            numTotal.Value = 0;
        }

        public void ActualizarDatos()
        {
            try
            {
                txtId.Text = Convert.ToString(((Factura)bsFacturas.Current).Id);
                cboCliente.Text = ((Factura)bsFacturas.Current).Cliente.ApellidoNombre;
                cboEmpleado.Text = ((Factura)bsFacturas.Current).Empleado.ApellidoNombre;
                dtpFecha.Value = ((Factura)bsFacturas.Current).FechaHora;
                dtpHora.Value = ((Factura)bsFacturas.Current).FechaHora;
                numSubTotal.Value = ((Factura)bsFacturas.Current).SubTotal;
                numIva.Value = ((Factura)bsFacturas.Current).Iva;
                numTotal.Value = ((Factura)bsFacturas.Current).Total;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion

        #region Eventos

        private void btnInsertar_Click(object sender, EventArgs e)
        {
            try
            {
                estado = EnumEstado.NUEVO;
                HabilitarControles();
                LimpiarCampos();
                cboCliente.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnVerDetalles_Click(object sender, EventArgs e)
        {

        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                presentador.Aceptar();
                HabilitarControles();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                HabilitarControles();
                presentador.Inicializar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void grdFacturas_SelectionChanged(object sender, EventArgs e)
        {
            ActualizarDatos();
        }

        #endregion


        
    }
}
